Build ASan runtime for ARM/Android. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@166559 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/Makefile b/Makefile index aea6b88..63b0536 100644 --- a/Makefile +++ b/Makefile 
@@ -133,10 +133,12 @@  $(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config))  $(call Set,Tmp.SHARED_LIBRARY,$(strip \  $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch)))) +$(call Set,Tmp.SHARED_LIBRARY_SUFFIX,$(strip \ + $(call GetCNAVar,SHARED_LIBRARY_SUFFIX,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))    # Compute the library suffix.  $(if $(call streq,1,$(Tmp.SHARED_LIBRARY)), - $(call Set,Tmp.LibrarySuffix,dylib), + $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)),  $(call Set,Tmp.LibrarySuffix,a))    # Compute the archs to build, depending on whether this is a universal build or @@ -192,7 +194,7 @@    # Compute the library suffix.  $(if $(call streq,1,$(Tmp.SHARED_LIBRARY)), - $(call Set,Tmp.LibrarySuffix,dylib), + $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)),  $(call Set,Tmp.LibrarySuffix,a))    # Compute the object inputs for this library. @@ -210,6 +212,10 @@ 	$(Summary) " DYLIB: $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@" 	$(Verb) $(Tmp.CC) -arch $(Tmp.Arch) -dynamiclib -o $$@ \  $(Tmp.Inputs) $(Tmp.LDFLAGS) +$(Tmp.ObjPath)/libcompiler_rt.so: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir +	$(Summary) " SO: $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@" +	$(Verb) $(Tmp.CC) -shared -o $$@ \ + $(Tmp.Inputs) $(Tmp.LDFLAGS)  .PRECIOUS: $(Tmp.ObjPath)/.dir    # Per-Config-Arch Targets 
diff --git a/make/lib_info.mk b/make/lib_info.mk index 81f9695..5e66816 100644 --- a/make/lib_info.mk +++ b/make/lib_info.mk 
@@ -56,4 +56,4 @@  CC CFLAGS LDFLAGS FUNCTIONS OPTIMIZED \  RANLIB RANLIBFLAGS \  VISIBILITY_HIDDEN KERNEL_USE \ - SHARED_LIBRARY STRIP LIPO + SHARED_LIBRARY SHARED_LIBRARY_SUFFIX STRIP LIPO 
diff --git a/make/options.mk b/make/options.mk index d943e00..ec4a55d 100644 --- a/make/options.mk +++ b/make/options.mk 
@@ -43,3 +43,5 @@    STRIP := strip  LIPO := lipo + +SHARED_LIBRARY_SUFFIX := so 
diff --git a/make/platform/clang_darwin.mk b/make/platform/clang_darwin.mk index db128cf..5bc0e10 100644 --- a/make/platform/clang_darwin.mk +++ b/make/platform/clang_darwin.mk 
@@ -435,3 +435,5 @@  KERNEL_USE.cc_kext_ios5 := 1    VISIBILITY_HIDDEN := 1 + +SHARED_LIBRARY_SUFFIX := dylib 
diff --git a/make/platform/clang_linux.mk b/make/platform/clang_linux.mk index 770a551..4366143 100644 --- a/make/platform/clang_linux.mk +++ b/make/platform/clang_linux.mk 
@@ -66,6 +66,11 @@  Arch.tsan-x86_64 := x86_64  endif   +ifneq ($(LLVM_ANDROID_TOOLCHAIN_DIR),) +Configs += asan-arm-android +Arch.asan-arm-android := arm-android +endif +  endif  endif   @@ -81,6 +86,14 @@  CFLAGS.asan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin  CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin   +SHARED_LIBRARY.asan-arm-android := 1 +ANDROID_COMMON_FLAGS := -target arm-linux-androideabi \ +	--sysroot=$(LLVM_ANDROID_TOOLCHAIN_DIR)/sysroot \ +	-B$(LLVM_ANDROID_TOOLCHAIN_DIR) +CFLAGS.asan-arm-android := $(CFLAGS) -fPIC -fno-builtin \ +	$(ANDROID_COMMON_FLAGS) -mllvm -arm-enable-ehabi +LDFLAGS.asan-arm-android := $(LDFLAGS) $(ANDROID_COMMON_FLAGS) -ldl +  # Use our stub SDK as the sysroot to support more portable building. For now we  # just do this for the non-ASAN modules, because the stub SDK doesn't have  # enough support to build ASAN. @@ -97,6 +110,8 @@  $(SanitizerCommonFunctions)  FUNCTIONS.asan-x86_64 := $(AsanFunctions) $(InterceptionFunctions) \  $(SanitizerCommonFunctions) +FUNCTIONS.asan-arm-android := $(AsanFunctions) $(InterceptionFunctions) \ + $(SanitizerCommonFunctions)  FUNCTIONS.tsan-x86_64 := $(TsanFunctions) $(InterceptionFunctions) \  $(SanitizerCommonFunctions)    @@ -105,3 +120,5 @@    # We don't need to use visibility hidden on Linux.  VISIBILITY_HIDDEN := 0 + +SHARED_LIBRARY_SUFFIX := so